#ifndef __USR_TMR_H
#define __USR_TMR_H	 

#include <stdint.h>
#include <stdbool.h>
#include "includes.h"


/* 定义定时器数量 */
#ifndef TMR_ID_COUNT
	#define TMR_ID_COUNT    12
#endif  /* TMR_ID_COUNT */


typedef void ( *tmr_procTriggerHdlr_t )( uint8_t ID );
typedef struct
{
  uint8_t	                  	TimerId;      /* 时钟ID */
  uint8_t                    	TimerType;    /* 时钟类型 */
  uint32_t                   	TimerValue;   /* 时间间隔 */
  tmr_procTriggerHdlr_t 		TimerHdlr;    /* 响应处理句柄 */
} tmr_t;


typedef struct 
{
  /* 定时器数量 */
  volatile uint8_t  tmr_nbr;

  /* 周期性标志 */
  bool tmr_cyclic[ TMR_ID_COUNT ];

  /* 定时器计数器 */
  volatile int32_t tmr_count[ TMR_ID_COUNT ];

  /* 定时器资源 */
  tmr_t tmr_alloc[ TMR_ID_COUNT ];
} TMR_IfTypedef;



/******************************************/
/*            定时器参数[配置]            */
/******************************************/


/* 定时器类型 */
#define TMR_TYPE_TICK   0   /* 10ms 定时器 */
#define TMR_TYPE_10MS   1   /* 10ms 定时器 */
#define TMR_TYPE_100MS  2   /* 100ms定时器 */


/****************/
/* 定时处理函数 */
/****************/

typedef void ( *tmr_procTriggerHdlr_t )( uint8_t ID );


/******************************************/
/*           用户接口函数[声明]           */
/******************************************/

/* 注销用户分配的定时器 */
extern bool TMR_UnSubscribe ( tmr_t *tmr, tmr_procTriggerHdlr_t Timerhdlr, uint8_t TimerType );

/* 注册定时器 */
extern tmr_t *TMR_Subscribe ( bool cyclic, uint32_t TimerValue, uint8_t TimerType, tmr_procTriggerHdlr_t Timerhdlr );


/******************************************/
/*           低层接口函数[声明]           */
/******************************************/

/* 软定时器单元低级初始化 */
extern void TMR_LowLevelIfInit ( void );

/* 软定时器10ms更新请求 */
extern void TMR_10msUpdateRequest ( void );

/* 软定时器100ms更新请求 */
extern void TMR_100msUpdateRequest ( void );

#endif





